package co.edu.udea.iw.rtf.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.rtf.dao.RespuestaDAO;
import co.edu.udea.iw.rtf.dto.Respuesta;
import co.edu.udea.iw.rtf.dto.Solicitud;
import co.edu.udea.iw.rtf.exception.RTFDaoException;

/**
 * 
 * @author juank
 *
 * Clase que implementa los metodos de la interfaz RespuestaDAO
 *
 */
public class RespuestaDAOImpl extends HibernateDaoSupport implements RespuestaDAO {

	/**
	 * Metodo que almacena la respuesta a una solicitud en la base de datos
	 * Crea una Session Hibernate para guardar los datos y una Transaction  para ingresarlos en la base de datos
	 * @return Respuesta
	 * @param respuesta
	 */
	@Override
	public Respuesta guardar(Respuesta respuesta) throws RTFDaoException {
		// TODO Auto-generated method stub
		Session session = null;
		Transaction tx = null;
		try{
			
			session = getSession();
			tx = session.beginTransaction();
			session.save(respuesta);
			
			tx.commit();
			return respuesta;
			
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
	}

	/**
	 * Metodo que obtiene la lista de respuestas de acuerdo a una solicitud
	 * Crea una ArrayList respuestas al cual asigna la lista de respuestas obtenidas con la Session Hibernate y las retorna
	 * @return List<Respuesta>
	 * @param solicitud
	 */
	@Override
	public List<Respuesta> obtener(Solicitud solicitud) throws RTFDaoException {
		// TODO Auto-generated method stub
		List<Respuesta> respuestas = new ArrayList<Respuesta>();
		Session sesion = null;
		
		try{
			sesion = getSession();
			
			respuestas = sesion.createCriteria(Respuesta.class)
			        .add(Restrictions.eq("id.solicitud.codigo", solicitud.getCodigo()))
			        .list();	
		
		
			return respuestas;
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
	}

}
